# -*- coding: utf-8 -*-
from bootstrap_toolkit.widgets import BootstrapDateInput
from datos_taxonomicos.models import Orden, Familia, Genero, Especie, Dato
from django import forms
from django.db.models.query import QuerySet
from django.db.models.query_utils import Q
from django.db.models.sql.query import Query
from django.forms import Form
from django.utils.datetime_safe import datetime
from estados_de_conservacion.models import EstadoConservacion
from estados_de_proyecto.models import EstadoProyecto
from expertos.models import Experto
from instituciones.models import Institucion
from lineas_de_investigacion.models import LineaInvestigacion
from localidades.models import Pais
from proyectos.models import Proyecto
from tipos_documento.models import TipoDocumento
from tipos_migracion.models import TipoMigracion

def get_choices_for_anho():
    lista_a_retornar = []
    current_year = int(datetime.now().year) + 1
    lista_a_retornar.append(('','---------'))
    for i in reversed(range(1900,current_year)):
        lista_a_retornar.append((i,i))
    return lista_a_retornar

def get_choices_for_buscador():
    return [
            ('todo','Todo'),('especies','Especies'),('expertos','Expertos'),
            ('instituciones','Instituciones'),
            ('documentos','Documentos'),('proyectos','Proyectos'),
            ('publicaciones','Publicaciones')
            ]


class BuscadorForm(Form):
    buscar_por = forms.ChoiceField(choices=get_choices_for_buscador())
    texto_de_busqueda = forms.CharField(required=False)
    
    
    
    
#este Form esta aca por que el autocomplete no se carga si esta en la misma
#archivo que el ModelForm que carga el autocomplete    
class DetalleBuscarForm(Form):
    nombre_busqueda = forms.CharField(label=u'Nombre Común de la Especie',required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    especie = forms.CharField(required = False,label=u'Nombre Científico de la Especie',widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    estado_de_conservacion = forms.ModelChoiceField(required = False,queryset = EstadoConservacion.objects.all(),label=u'Estado de Conservación')
    tipo_de_migracion = forms.ModelChoiceField(required = False,queryset = TipoMigracion.objects.all(),label=u'Tipo de Migración')
    orden = forms.ModelChoiceField(required = False,queryset = Orden.objects.all(), 
                                   widget = forms.Select(attrs = {
                                                                  'onchange' : 'cambiar_otros_select_orden();'
                                                                  })) 
    familia = forms.ModelChoiceField(required = False,queryset = Familia.objects.all(),widget = forms.Select(attrs = {
                                                                  'onchange' : 'cambiar_otros_select_familia();'
                                                                  }))
    genero = forms.ModelChoiceField(required = False,queryset = Genero.objects.all(), label = u'Género',widget = forms.Select(attrs = {
                                                                  'onchange' : 'cambiar_otros_select_genero();'
                                                                  }))
    #especie = forms.ModelChoiceField(required = False,queryset = Especie.objects.all(),widget = forms.Select(attrs = {
    #                                                              'onchange' : 'cambiar_otros_select_especie();'
    #                                                              }))
    pais = forms.ModelChoiceField(required = False,queryset = Pais.objects.all(), label = u'País')
    
    def __init__(self, *args, **kw):
        """

        """
        orden = kw.pop('orden', None)
        familia = kw.pop('familia', None)
        #genero = kw.pop('genero',None)
        super(DetalleBuscarForm, self).__init__(*args, **kw)
        # Put the first and last name at the top
        if orden:
            self.fields['familia'].queryset = Familia.objects.filter(orden=orden)
            self.fields['genero'].queryset = Genero.objects.filter(familia__orden=orden)
            self.fields['especie'].queryset = Especie.objects.filter(genero__familia__orden = orden)
        if familia:
            self.fields['genero'].queryset = Genero.objects.filter(familia=familia)
            self.fields['especie'].queryset = Especie.objects.filter(genero__familia = familia)


class ExpertoBuscarForm(Form):
    nombre = forms.CharField(required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    apellido = forms.CharField(required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    campo = forms.ModelChoiceField(required = False,queryset = Dato.objects.all(),label= u'Dato Taxonómicos')
    pais = forms.ModelChoiceField(required = False,queryset = Pais.objects.all(), label = u'País')
    institucion = forms.ModelChoiceField(required = False,queryset = Institucion.objects.all(), label = u'Institución')
    linea = forms.ModelChoiceField(required = False,queryset = LineaInvestigacion.objects.all(), label = u'Línea de investigación')
    proyecto = forms.ModelChoiceField(required = False,queryset = Proyecto.objects.all(), label = u'Proyecto')
    
class InstitucionBuscarForm(Form):
    nombre = forms.CharField(required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    TIPO_DE_INSTITUCION_CHOICES = (
    ('', '-----'),
    ('FU', 'Fundación'),
    ('ON', 'Organización no gubernamental'),
    ('OP', 'Organismo público'),
    ('AG', 'Agencia gubernamental'),
    ('OI', 'Organismo internacional'),
    ('AI', 'Agencia intergubernamental'),
    ('AP', 'Asociación profesional'),
    )
    tipo = forms.ChoiceField(required=False,choices=TIPO_DE_INSTITUCION_CHOICES,label= u'Tipo de Institución')
    campo = forms.ModelChoiceField(required = False,queryset = Dato.objects.all(),label= u'Dato Taxonómicos')
    pais = forms.ModelChoiceField(required = False,queryset = Pais.objects.all(), label = u'País')
    linea = forms.ModelChoiceField(required = False,queryset = LineaInvestigacion.objects.all(), label = u'Línea de investigación')
    
class ProyectoBuscarForm(Form):
    nombre = forms.CharField(required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    estado = forms.ModelChoiceField(required = False,queryset = EstadoProyecto.objects.all(),label= u'Estado de Proyecto')
    campo = forms.ModelChoiceField(required = False,queryset = Dato.objects.all(),label= u'Datos Taxonómicos')
    pais = forms.ModelChoiceField(required = False,queryset = Pais.objects.all(), label = u'País')
    institucion = forms.ModelChoiceField(required = False,queryset = Institucion.objects.all(), label = u'Institución')
    linea = forms.ModelChoiceField(required = False,queryset = LineaInvestigacion.objects.all(), label = u'Línea de investigación')
    
class DocumentoBuscarForm(Form):
    nombre = forms.CharField(required = False,widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    tipo = forms.ModelChoiceField(required = False,queryset = TipoDocumento.objects.all(),label= u'Tipo de Documento')
    campo = forms.ModelChoiceField(required = False,queryset = Dato.objects.all(),label= u'Datos Taxonómicos')
    pais = forms.ModelChoiceField(required = False,queryset = Pais.objects.all(), label = u'País')
    institucion = forms.ModelChoiceField(required = False,queryset = Institucion.objects.all(), label = u'Institución')
    linea = forms.ModelChoiceField(required = False,queryset = LineaInvestigacion.objects.all(), label = u'Línea de investigación')
    proyecto = forms.ModelChoiceField(required = False,queryset = Proyecto.objects.all(), label = u'Proyecto')
    creador = forms.ModelChoiceField(required = False,queryset = Experto.objects.all(), label = u'Creador')
    
class PublicacionBuscarForm(Form):
    titulo = forms.CharField(required = False,label='Título',widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    keywords = forms.CharField(required = False,label='Palabras clave',widget = forms.TextInput(attrs = {
                                                                  'onkeydown' : 'handleKeyPress(event);',
                                                                  }))
    desde = forms.ChoiceField(choices=get_choices_for_anho(),label=u'Desde (Año)',required=False)
    hasta = forms.ChoiceField(choices=get_choices_for_anho(),label=u'Hasta (Año)',required=False)
    
    TIPO_DE_PUBLICACION_CHOICES = (
    ('', '---------'),
    ('articulo', u'Artículo de Revista'),
    ('capitulo', u'Capítulo de Libro'),
    ('libro', u'Libro'),
    ('conferencia', u'Publicación en Conferencia'),
    ('reporte', u'Reporte Técnico'),
    ('tesis', u'Tesis'),
    )
    tipo = forms.ChoiceField(required=False,choices=TIPO_DE_PUBLICACION_CHOICES,label= u'Tipo de Publicación')
    #Autores externos y expertos
    dato = forms.ModelChoiceField(required = False,queryset = Dato.objects.all(), label = u'Dato taxonómico')
    institucion = forms.ModelChoiceField(required = False,queryset = Institucion.objects.all(), label = u'Institución')
    lineas = forms.ModelChoiceField(required = False,queryset = LineaInvestigacion.objects.all(), label = u'Líneas de investigación')
    proyecto = forms.ModelChoiceField(required = False,queryset = Proyecto.objects.all(), label = u'Proyecto')
        
    

        